// hc_sr_trig模块定义开始，用于生成超声波触发信号
//   Description  ﹕超声波触发测距模块
// 波形周期300ms，前15us高电平
module 	hc_sr_trig(
    input wire clk_us,   // 输入1MHz系统时钟
    input wire Rst_n,    // 输入复位信号，低电平有效
    
    output wire trig     // 输出触发测距信号
);

	// 参数声明 300_000*1_000ns = 3 *108ns = 0.3s  = 300ms
	// 波形周期300ms，前10us高电平 
	// 建议测量周期为60ms以上，以防止发射信号对回响信号的影响。
	parameter CYCLE_MAX = 19'd300_000;// 定义触发信号的一个周期计数，基于1MHz时钟

	// 内部线网/寄存器声明
	reg [18:0] cnt		;    // 计数器，用于生成触发信号的时间控制
	wire add_cnt		;      // 计数器使能信号
	wire end_cnt		;      // 计数器结束信号，达到预定义周期时有效

	// 计数器逻辑，用于控制触发信号的产生
	always @(posedge clk_us or negedge Rst_n) begin  
	    if(!Rst_n) begin     // 如果复位信号有效，则计数器清零
	        cnt <= 'd0; 
	    end else if(add_cnt) begin  // 如果计数器使能
	        if(end_cnt) begin       // 如果计数器达到预定义的最大周期
	            cnt <= 'd0;       // 计数器重置
	        end else begin
	            cnt <= cnt + 1'b1;  // 否则计数器递增
	        end  
	    end else begin
	        cnt <= cnt;            // 如果计数器未使能，则保持当前值
	    end  
	end 
	assign add_cnt = 1'b1; // 赋值计数器使能信号，始终使计数器有效
	assign end_cnt = add_cnt && cnt == CYCLE_MAX - 9'd1; // 赋值计数器结束信号，当计数器值达到CYCLE_MAX - 1时有效
	
	// 赋值触发信号，当计数器值小于15时，输出高电平，作为触发
	//cnt<15置为高电平，表示前 15us为高电平，作为触发信号
	// 此逻辑基于HC-SR04模块的触发信号需求，通常为10微秒的高电平
	assign trig = cnt < 15 ? 1'b1 : 1'b0;

/*
	计数器cnt用于生成持续一定时间的触发信号trig。当计数器小于15时，trig为高电平，表示触发信号是活跃的。
	计数器在每个1MHz时钟的上升沿递增，当计数器达到设定的最大周期CYCLE_MAX时，计数器重置，重新开始计数。
	这样，trig信号就会周期性地输出高电平脉冲，以满足HC-SR04超声波传感器的触发需求。
*/

endmodule 

